package com.ingrun.tuboshu.utils;

import java.util.HashMap;
import java.util.Map;

public enum ResponseEnum {

    /**********************通用日志信息***************************/

    /**
     * 操作成功
     **/
    SUCCESS(200, "操作成功"),
    /**
     * 操作失败
     **/
    FAIL(0, "操作失败"),
    /**
     * 服务端异常
     **/
    ERROR(500, "系统内部错误"),
    /**
     * 对象创建成功
     **/
    CREATED(201, "对象创建成功"),
    /**
     * 请求已经被接受
     **/
    ACCEPTED(202, "请求已经被接受"),
    /**
     * 操作已经执行成功，但是没有返回数据
     **/
    NO_CONTENT(204, "操作已经执行成功，但是没有返回数据"),
    /**
     * 资源已被移除
     **/
    MOVED_PERM(301, "资源已被移除"),
    /**
     * 重定向
     */
    SEE_OTHER(303, "重定向"),
    /**
     * 资源没有被修改
     **/
    NOT_MODIFIED(304, "资源没有被修改"),
    /**
     * 参数列表错误（缺少，格式不匹配
     **/
    BAD_REQUEST(400, "参数列表错误（缺少，格式不匹配）"),
    /**
     * 未授权
     **/
    UNAUTHORIZED(401, "未授权"),
    /**
     * 访问受限，授权过期
     **/
    FORBIDDEN(403, "访问受限，授权过期"),
    /**
     * 资源，服务未找到
     **/
    NOT_FOUND(404, "资源，服务未找到"),
    /**
     * 不允许的http方法
     **/
    BAD_METHOD(405, "不允许的http方法"),
    /**
     * 资源冲突，或者资源被锁
     **/
    CONFLICT(409, "资源冲突，或者资源被锁"),
    /**
     * 不支持的数据，媒体类型
     **/
    UNSUPPORTED_TYPE(415, "不支持的数据，媒体类型"),
    /**
     * 接口未实现
     **/
    NOT_IMPLEMENTED(501, "接口未实现"),

    /**
     * 请求参数不正确
     **/
    REQUEST_PARAM_ERROR(10001, "请求参数不正确"),

    /**登录相关**/
    /**
     * 用户名或密码不存在
     **/
    USERNAME_OR_PASSWORD_ERROR(20001, "用户名或密码错误"),

    // 当前用户已被禁用
    USER_DISABLED_ERROR(20002, "当前用户已被禁用");

    // 成员变量
    private Integer code;
    private String message;

    // 构造方法
    ResponseEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    private static final Map<Integer, ResponseEnum> ENUM_MAP = new HashMap<Integer, ResponseEnum>();

    static {
        for (ResponseEnum item : values()) {
            ENUM_MAP.put(item.getCode(), item);
        }
    }

    public Integer getCode() {
        return this.code;
    }

    public String getMessage() {
        return this.message;
    }

    public static ResponseEnum getModelByKey(Integer code) {
        if (code != null) {
            return ENUM_MAP.get(code);
        }
        return null;
    }

}
